package com.example.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.dto.CommentDTO;
import com.example.dto.CommentLikeDTO;
import com.example.dto.CommentQueryDTO;
import com.example.entity.Comment;
import com.example.vo.CommentVO;

/**
 * <p>
 * 博客评论表 服务类
 * </p>
 *
 * @author wuyunbin
 * @since 2024-10-20
 */
public interface CommentService extends IService<Comment> {

    /**
     * 添加评论
     * @param commentDTO 评论信息
     * @return 评论ID
     */
    Long addComment(CommentDTO commentDTO);

    /**
     * 获取文章评论列表
     * @param queryDTO 查询条件
     * @return 分页评论列表
     */
    IPage<CommentVO> getCommentsByArticleId(CommentQueryDTO queryDTO);

    /**
     * 点赞评论
     * @param likeDTO 点赞信息
     * @return 是否成功
     */
    boolean likeComment(CommentLikeDTO likeDTO);
    
    /**
     * 获取用户评论列表（根据用户角色决定是否只查询自己的评论）
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @param isAdmin 是否管理员
     * @return 分页评论列表
     */
    IPage<CommentVO> getUserComments(Long userId, int pageNum, int pageSize, boolean isAdmin);
    
    /**
     * 删除评论
     * @param commentId 评论ID
     * @param userId 当前操作的用户ID
     * @param isAdmin 是否管理员
     * @return 是否成功
     */
    boolean deleteComment(Long commentId, Long userId, boolean isAdmin);

    /**
     * 获取当前用户评论数量
     * @return 评论数量
     */
    Integer getCommentCounts();
    
    /**
     * 获取指定用户的评论数量
     * @param userId 用户ID
     * @return 评论数量
     */
    Integer getUserCommentCounts(Long userId);
}